<?php
/**
 * @Copyright (c) 2011, 新浪网运营部-网络应用开发部
 * All rights reserved.
 * 环境检测
 * @author          wangxin <wangxin3@staff.sina.com.cn>
 * @time            2011/3/9 17:24
 * @version         Id: 0.9
*/
$str = '<div>基本环境检测：</div>';
//PHP版本检测
if (substr(phpversion(), 0, 1) < 5) {
    $str .= '<div class="text_red">PHP版本检测失败，PHP版本必须 >= 5...</div>';
} else {
    $str .= '<div class="text_green">PHP版本检测成功，当前版本：'.phpversion().'...</div>';
}
//magic_quotes_gpc
if (get_magic_quotes_gpc()) {
    $str .= '<div class="text_red">magic_quotes_gpc扩展检测失败，magic_quotes_gpc必须关闭...</div>';
} else {
    $str .= '<div class="text_green">magic_quotes_gpc扩展检测通过，当前状态：关闭...</div>';
}
$str .= '<div>所需扩展检测：</div>';
//mysql
if (!extension_loaded('mysql')) {
    $str .= '<div class="text_red">mysql扩展检测失败，mysql扩展未安装...</div>';
} else {
    $str .= '<div class="text_green">mysql扩展检测通过，当前状态：已安装...</div>';
}
//pod
if (!extension_loaded('pdo')) {
    $str .= '<div class="text_red">pdo扩展检测失败，pdo扩展未安装...</div>';
} else {
    $str .= '<div class="text_green">pdo扩展检测通过，当前状态：已安装...</div>';
}
//pdo_mysql
if (!extension_loaded('pdo_mysql')) {
    $str .= '<div class="text_red">pdo_mysql扩展检测失败，pdo_mysql扩展未安装...</div>';
} else {
    $str .= '<div class="text_green">pdo_mysql扩展检测通过，当前状态：已安装...</div>';
}
//json
if (!extension_loaded('json')) {
    $str .= '<div class="text_red">json扩展检测失败，json扩展未安装...</div>';
} else {
    $str .= '<div class="text_green">json扩展检测通过，当前状态：已安装...</div>';
}
//curl
if (!extension_loaded('curl')) {
    $str .= '<div class="text_red">curl扩展检测失败，curl扩展未安装...</div>';
} else {
    $str .= '<div class="text_green">curl扩展检测通过，当前状态：已安装...</div>';
}
//SimpleXML
if (!extension_loaded('SimpleXML')) {
    $str .= '<div class="text_red">SimpleXML扩展检测失败，SimpleXML扩展未安装...</div>';
} else {
    $str .= '<div class="text_green">SimpleXML扩展检测通过，当前状态：已安装...</div>';
}
//mbstring
if (!extension_loaded('mbstring')) {
    $str .= '<div class="text_red">mbstring扩展检测失败，mbstring扩展未安装...</div>';
} else {
    $str .= '<div class="text_green">mbstring扩展检测通过，当前状态：已安装...</div>';
}
$str .= '<div>环境变量设置检测：</div>';
//环境变量检测
$env = '';
if (!$_SERVER['SINASRV_DATA_DIR']) {
    $env .= '<div class="text_red">Apache环境变量SINASRV_DATA_DIR检测失败，未设置，请到apache的conf文件中通过SetEnv设置...</div>';
}
if (!$_SERVER['SINASRV_CACHE_DIR']) {
    $env .= '<div class="text_red">Apache环境变量SINASRV_CACHE_DIR检测失败，未设置，请到apache的conf文件中通过SetEnv设置...</div>';
}
if (!$_SERVER['SINASRV_APPLOGS_DIR']) {
    $env .= '<div class="text_a">Apache环境变量SINASRV_APPLOGS_DIR检测失败，未设置，请到apache的conf文件中通过SetEnv设置...</div>';
}
if (!$_SERVER['SINASRV_MEMCACHED_SERVERS']) {
    $env .= '<div class="text_a">Apache环境变量SINASRV_MEMCACHED_SERVERS检测失败，未设置，请到apache的conf文件中通过SetEnv设置...</div>';
}
if (!$_SERVER['SINASRV_MEMCACHED_KEY_PREFIX']) {
    $env .= '<div class="text_a">Apache环境变量SINASRV_MEMCACHED_KEY_PREFIX检测失败，未设置，请到apache的conf文件中通过SetEnv设置...</div>';
}
if (!$_SERVER['SINASRV_DB_HOST']) {
    $env .= '<div class="text_red">Apache环境变量SINASRV_DB_HOST检测失败，未设置，请到apache的conf文件中通过SetEnv设置...</div>';
}
if (!$_SERVER['SINASRV_DB_PORT']) {
    $env .= '<div class="text_red">Apache环境变量SINASRV_DB_PORT检测失败，未设置，请到apache的conf文件中通过SetEnv设置...</div>';
}
if (!$_SERVER['SINASRV_DB_USER']) {
    $env .= '<div class="text_red">Apache环境变量SINASRV_DB_USER检测失败，未设置，请到apache的conf文件中通过SetEnv设置...</div>';
}
if (!$_SERVER['SINASRV_DB_PASS']) {
    $env .= '<div class="text_red">Apache环境变量SINASRV_DB_PASS检测失败，未设置，请到apache的conf文件中通过SetEnv设置...</div>';
}
if (!$_SERVER['SINASRV_DB_NAME']) {
    $env .= '<div class="text_red">Apache环境变量SINASRV_DB_NAME检测失败，未设置，请到apache的conf文件中通过SetEnv设置...</div>';
}
if (!$_SERVER['SINASRV_DB_HOST_R']) {
    $env .= '<div class="text_red">Apache环境变量SINASRV_DB_HOST_R检测失败，未设置，请到apache的conf文件中通过SetEnv设置...</div>';
}
if (!$_SERVER['SINASRV_DB_PORT_R']) {
    $env .= '<div class="text_red">Apache环境变量SINASRV_DB_PORT_R检测失败，未设置，请到apache的conf文件中通过SetEnv设置...</div>';
}
if (!$_SERVER['SINASRV_DB_USER_R']) {
    $env .= '<div class="text_red">Apache环境变量SINASRV_DB_USER_R检测失败，未设置，请到apache的conf文件中通过SetEnv设置...</div>';
}
if (!$_SERVER['SINASRV_DB_PASS_R']) {
    $env .= '<div class="text_red">Apache环境变量SINASRV_DB_PASS_R检测失败，未设置，请到apache的conf文件中通过SetEnv设置...</div>';
}
if (!$_SERVER['SINASRV_DB_NAME_R']) {
    $env .= '<div class="text_red">Apache环境变量SINASRV_DB_NAME_R检测失败，未设置，请到apache的conf文件中通过SetEnv设置...</div>';
}
if (!empty($env)) {
    $str .= '<div class="text_a">环境变量检测失败，请按动态池环境设置apache环境变量，需要设置如下：</div>';
    $str .= '<div>'.$env.'</div>';
} else {
    $str .= '<div class="text_green">magic_quotes_gpc检测通过，当前状态关闭...</div>';
}
//环境变量可用性检测
$str .= '<div>环境变量可用性检测：</div>';
if (!is_dir($_SERVER['SINASRV_DATA_DIR'])) {
    $str .= '<div class="text_red">数据目录检测失败，SINASRV_DATA_DIR设置：'.$_SERVER['SINASRV_DATA_DIR'].'不为目录</div>';
} else {
    $str .= '<div class="text_green">数据目录检测成功，SINASRV_DATA_DIR目录为：'.$_SERVER['SINASRV_DATA_DIR'].'...</div>';
}
if (!is_dir($_SERVER['SINASRV_CACHE_DIR'])) {
    $str .= '<div class="text_red">数据目录检测失败，SINASRV_CACHE_DIR设置：'.$_SERVER['SINASRV_CACHE_DIR'].'不为目录</div>';
} else {
    $str .= '<div class="text_green">数据目录检测成功，SINASRV_CACHE_DIR目录为：'.$_SERVER['SINASRV_CACHE_DIR'].'...</div>';
}

try {
    $dsn = "mysql:dbname={$_SERVER['SINASRV_DB_NAME']};port={$_SERVER['SINASRV_DB_PORT']};host={$_SERVER['SINASRV_DB_HOST']}";
    $db = new PDO($dsn,$_SERVER['SINASRV_DB_USER'], $_SERVER['SINASRV_DB_PASS']);
} catch (Exception $e) {}
if ($db) {
    $str .= '<div class="text_green">数据库主库检测成功，SINASRV_DB_*目录为：'.$dsn.'...</div>';
} else {
    $str .= '<div class="text_red">数据库主库检测失败，SINASRV_DB_*设置：'.$dsn.'，链接失败</div>';
}
try {
    $dsn = "mysql:dbname={$_SERVER['SINASRV_DB_NAME_R']};port={$_SERVER['SINASRV_DB_PORT_R']};host={$_SERVER['SINASRV_DB_HOST_R']}";
    $db_r = new PDO($dsn,$_SERVER['SINASRV_DB_USER_R'], $_SERVER['SINASRV_DB_PASS_R']);
} catch (Exception $e) {}
if ($db_r) {
    $str .= '<div class="text_green">数据库从库检测成功，SINASRV_DB_*_R目录为：'.$dsn.'...</div>';
} else {
    $str .= '<div class="text_red">数据库从库检测失败，SINASRV_DB_*_R设置：'.$dsn.'，链接失败</div>';
}
try {
    $rs = false;
    $mc = new Memcache();
    $serverArr = explode (" ", $_SERVER['SINASRV_MEMCACHED_SERVERS']);
    foreach ($serverArr as $v) {
        list($server, $port) = explode(":", $v);
        if (empty($server)) {
            continue;
        }
        $rs = $mc->addServer($server, $port);var_dump($rs);
    }
    $rs = @$mc->set('_test_a', '1');
} catch (Exception $e) {}
if ($rs) {
    $str .= '<div class="text_green">Memcache检测成功，SINASRV_MEMCACHED_SERVERS设置为：'.$_SERVER['SINASRV_MEMCACHED_SERVERS'].'...</div>';
} else {
    $str .= '<div class="text_red_1">Memcache检测失败，SINASRV_MEMCACHED_SERVERS设置：“'.$_SERVER['SINASRV_MEMCACHED_SERVERS'].'”，连接失败，如不用MC缓存对系统无影响</div>';
}

if (is_dir($_SERVER['SINASRV_DATA_DIR']) && file_put_contents($_SERVER['SINASRV_DATA_DIR'] . '/._test.test', '') !== false) {
    $str .= '<div class="text_green">数据文件目录可用性检测成功，SINASRV_DATA_DIR目录为：'.$_SERVER['SINASRV_DATA_DIR'].'...</div>';
    unlink($_SERVER['SINASRV_DATA_DIR'] . '/._test.test');
} else {
    $str .= '<div class="text_red">数据文件目录可用性检测失败，SINASRV_DATA_DIR设置：“'.$_SERVER['SINASRV_DATA_DIR'].'”，如目录设置正确，请检查目录权限</div>';
}
if (is_dir($_SERVER['SINASRV_CACHE_DIR']) && file_put_contents($_SERVER['SINASRV_CACHE_DIR'] . '/._test.test', '') !== false) {
    $str .= '<div class="text_green">cache文件目录可用性检测成功，SINASRV_CACHE_DIR目录为：'.$_SERVER['SINASRV_CACHE_DIR'].'...</div>';
    unlink($_SERVER['SINASRV_CACHE_DIR'] . '/._test.test');
} else {
    $str .= '<div class="text_red">cache文件目录可用性检测失败，SINASRV_CACHE_DIR设置：“'.$_SERVER['SINASRV_CACHE_DIR'].'”，如目录设置正确，请检查目录权限</div>';
}
if (is_dir($_SERVER['SINASRV_APPLOGS_DIR']) && file_put_contents($_SERVER['SINASRV_APPLOGS_DIR'] . '/._test.test', '') !== false) {
    $str .= '<div class="text_green">日志文件目录可用性检测成功，SINASRV_APPLOGS_DIR目录为：'.$_SERVER['SINASRV_APPLOGS_DIR'].'...</div>';
    unlink($_SERVER['SINASRV_APPLOGS_DIR'] . '/._test.test');
} else {
    $str .= '<div class="text_red_1">日志文件目录可用性检测失败，SINASRV_APPLOGS_DIR设置：“'.$_SERVER['SINASRV_APPLOGS_DIR'].'”，如目录设置正确，请检查目录权限，不记录日志无影响</div>';
}
if (!strpos($str, 'test_red')) {
    $str .= '<div style="font-size:20px;padding-top:20px;">强力建议安装firefox插件firephp，用于调试页面</div>';
}

if (!strpos($str, 'test_red')) {
    $str .= '<div style="font-size:20px;padding-top:20px;">测试通过,您可以点击<a href="./admin/index.php" style="color:#f00;">这里</a>创建管理后台APP</div>';
}
?>
<html>
<head>
<title>项目环境监测</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<style>
body {text-align:center;padding-top:50px;background-color:#F7E8AC;}
table {font-size:12px; line-height:20px;border-color:#FF9900; border-style:groove;width:800px;}
th {background-color:#FF9900; font-size:14px; font-weight:bold;}
td {padding-left:5px; border-style:inherit}
.text_red {color:#FF0000;padding-left:10px;font-size:14px;}
.text_red_1 {color:#999;padding-left:10px;}
.text_green {color:#41B200;padding-left:10px;}
.text_a {color:#999;padding-left:30px;}
</style>
</head>
<body>
<div style="margin:0 auto;width:1000px;text-align:center;">
    <table align="center">
        <tr><th>项目环境监测结果</th></tr>
        <tr>
        	<td>
                <div style="width:100px;height:20px;background-color:#f00;border:solid 1px #fff;float:left;text-align:center;color:#fff;">必须处理错误</div>
                <div style="width:100px;height:20px;background-color:#999;border:solid 1px #fff;float:left;margin-left:30px;text-align:center;color:#fff;">可以或略错误</div>
                <div style="width:100px;height:20px;background-color:#41B200;border:solid 1px #fff;float:left;margin-left:30px;text-align:center;color:#fff;">测试通过</div>
    </td>
        </tr>
        <tr>
        	<td><?php echo $str?></td>
        </tr>
    </table>
</div>
</body>
</html>